Поскольку Crystal Reports использует свой собственный язык формул, в нем имеется ряд «тонких моментов», о которых следует помнить.
Перегруженные функции.
Многие функции имеют несколько форм, которые имеют одинаковое имя, но принимают разное количество аргументов. Таковыми являются, например, практически все функции вычисления общих и промежуточных итогов. Например, функция Sum имеет три варианта синтаксиса: с одним, двумя и тремя аргументами.
1. Sum({Orders.Qv})
Возвращает общее количество заказов
2. Sum({Orders.Qv},{Customers.Name})
Возвращает промежуточное
количество заказов для группы, связанной с конкретным потребителем
3. Sum({Orders.Qv},{Orders.Date},”weekly”)
Возвращает промежуточное
количество заказов для группы (итог за неделю), связанной с конкретной датой.
Третий аргумент соответствует периоду времени, если группа сформирована по полю
даты. Если надо еще более детализировать промежуточные итоги, в качестве
третьего аргумента может выступать еще одно поле БД.
Обработка значений Null
Вообще-то очень желательно, чтобы поля с таким значением вообще не попадали в отчет, так как сильно тормозят его формирование. Если поле БД просто вставлено в отчет, и в нем попадется значение Null, в готовом отчете так и будет написано: «Null». Если поле со значением Null попадется формуле, формула также возвратит Null независимо от синтаксиса. Единственное исключение – функция IsNull(), которая, собственно, и предназначена для обработки таких значений.
Для борьбы с Null существует еще один способ. Идем в меню File->Report Options…. В открывшемся окошке устанавливаем флажок Convert NULL Field to Default
Особенности работы со строками.
При вычислении формул Crystal Reports сам пытается понять тип переданного аргумента. Поэтому следует быть осторожным, в частности с операцией сложения. Оператор + проводит как сложение чисел, так и конкатенацию строк. (Для того, чтобы гарантировать конкатенацию, используйте оператор &).
В Шаг 16 - Комбинирование текстовых полей с другими. мы провели комбинирование текстового поля с полем базы данных. А вот как можно сделать то же самое с помощью формулы:
“Продано “ & {Order Details.Quantity} & “ штук”
Еще раз обращаю внимание на пробелы в строках (после продано и перед штук). Нельзя о них забывать. С формулами, конечно, больше возни, но и работают они быстрее. Если для вас важен фактор скорости формирования отчета (т.е. если полученный отчет будет распространятся в электронном виде), лучше использовать формулы. Бумаге, естественно, все равно.
В общем, функции для работы со строками очень похожи на аналогичные в других языках программирования. Например, имеются функции Left, Right, Mid.
Пример:
Имеется база данных с фамилиями, именами и отчествами. А в отчет
требуется вывести фамилию и инициалы:
{Persons.LName} & “ “ & Left({Persons.Name},1) & “. “ & Left({Persons.SName},1) & “.”
Crystal Reports позволяет также интерпретировать любые данные как массивы символов, и следовательно, применять к ним функции, принимающие массивы и операторы массивов. Нумерация этих массивов начинается с 1.
Приведенный выше пример можно переписать так:
{Persons.LName} & “ “ & {Persons.Name}[1] & “. “ & {Persons.SName}[1] & “.”
Если надо выделить три первых символа имени:
{Persons.Name}[1 to 3]
Особенно удобен такой синтаксис при работе с датами (которые тоже бывают представлены в символьном формате). Он позволяет «разобрать дату на части»: день, месяц, год. Подробнее о датах чуть позже.
Среди строковых функций Crystal Reports имеется одна, заслуживающая особого внимания. Это функция ToText. О ней – в следующем шаге.